package com.uuj.dome;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * ClassName:controller
 * PACKAGE_NAME:com.uuj.dome
 */
@Controller
public class IndexController {

    @GetMapping("/index")
    public String index() {
        return "index";
    }

    /**
     * 上传单个文件
     *
     * @param request 请求体
     * @param file    上传文件
     * @return 上传文件是否成功
     */
    @PostMapping("/upload")
    @ResponseBody
    public String upload(HttpServletRequest request, MultipartFile file) {
        try {
            // 上传文件地址
            String path = request.getSession().getServletContext().getRealPath("/") + "upload/";
            // 如果目录不存在自动创建目录
            File dir = new File(path);
            // 判断目录是否存在
            if (!dir.exists()) {
                // 创建目录
                dir.mkdir();
            }
            executeUpload(file, path);
        } catch (IOException e) {
            // 打印错误栈信息
            e.printStackTrace();
            return "上传失败";
        }
        return "上传成功";
    }

    /**
     * 上传多个文件
     *
     * @param request 请求体
     * @param file    上传文件
     * @return 上传文件是否成功
     */
    @PostMapping("/uploads")
    @ResponseBody
    public String uploads(HttpServletRequest request, MultipartFile[] file) {
        try {
            // 上传文件地址
            String path = request.getSession().getServletContext().getRealPath("/") + "upload/";
            // 如果目录不存在自动创建目录
            File dir = new File(path);
            // 判断目录是否存在
            if (!dir.exists()) {
                // 创建目录
                dir.mkdir();
            }

            for (int i = 0; i < file.length; i++) {
                if (file[i] != null) {
                    executeUpload(file[i], path);
                }
            }
        } catch (IOException e) {
            // 打印错误栈信息
            e.printStackTrace();
            return "上传失败";
        }
        return "上传成功";
    }

    /**
     * 文件上传公用方法
     *
     * @param file 文件
     * @param path 上传文件地址
     * @throws IOException io异常
     */
    private void executeUpload(MultipartFile file, String path) throws IOException {
        // 文件名
        String filename = file.getOriginalFilename();
        // 上传文件后缀
        String suffix = filename.substring(filename.lastIndexOf("."));
        // 文件名
        String name = UUID.randomUUID() + suffix;
        // 服务器端保存文件对象
        File serverFile = new File(path + name);
        // 将上传的文件写入到服务器端文件内
        file.transferTo(serverFile);
    }

}
